﻿#region Copyright & License

// Copyright © 2012 François Chabot, Yves Dierick
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
// http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#endregion

using System;
using System.Xml;
using Microsoft.XLANGs.BaseTypes;
using NUnit.Framework;

namespace Be.Stateless.BizTalk.ContextProperties
{
	[TestFixture]
	public class MessageContextPropertyFixture
	{
		[Test]
		public void MessageContextPropertyEnforcesStrongTyping()
		{
			Assert.That(
				() => new MessageContextProperty<DummyProperty, int>(),
				Throws.TypeOf<TypeInitializationException>()
					.With.InnerException.TypeOf<ArgumentException>()
					.With.InnerException.Message.EqualTo(
						"Message context property 'DummyProperty' is of type 'String' but MessageContextProperty<DummyProperty, Int32> declares it of type 'Int32'."));

			Assert.That(
				() => new MessageContextProperty<DummyProperty, string>(),
				Throws.Nothing);
		}

		private class DummyProperty : MessageContextPropertyBase
		{
			#region Base Class Member Overrides

			public override XmlQualifiedName Name
			{
				get { return _qname; }
			}

			public override Type Type
			{
				get { return typeof(string); }
			}

			#endregion

			private static readonly XmlQualifiedName _qname = new XmlQualifiedName(@"DummyProperty", @"urn:schemas.stateless.be:biztalk:properties:dummy:2012:04");
		}
	}
}
